# install.packages(c("bioacoustics", "tuneR", "seewave", "dplyr", "tidyverse", "lubridate", "tools", "ggplot2", "ggpmisc", "plotly", "stringr", "monitoR", "pbapply", "foreach", "doParallel", "R.utils"), type="binary")
library(bioacoustics)
library(tuneR)
library(seewave)
library(dplyr)
library(tidyverse)
library(lubridate)
library(tools)
library(ggplot2)
library(ggpmisc)
library(plotly)
library(stringr)
library(foreach)
library(doParallel)
library(R.utils)
ymd_hms = function(dt) {
lubridate::ymd_hms(dt, tz="Pacific/Auckland")
}
dmy_hms = function(dt) {
lubridate::dmy_hms(dt, tz="Pacific/Auckland")
}
options(stringsAsFactors = FALSE)
files = list.files("data/2019 RFID", pattern = "*.TXT$", recursive = TRUE, full.names=TRUE)
csvs = lapply(files, function(path) {
csv = read.csv(path, header=FALSE, col.names = c("year", "month", "day", "hour","minute_sec", "id", "ext", "int", "msg"))
csv$site = strsplit(strsplit(path, "/")[[1]][4], "_")[[1]][1]
csv
})
rfid = do.call(rbind, csvs)
rfid$datetime = paste0(rfid$year, "-", rfid$month, "-", rfid$day, " ", rfid$hour, ":", rfid$minute_sec)
rfid$datetime = ymd_hms(rfid$datetime)
ggplot(rfid, aes(datetime)) +
geom_freqpoly(binwidth = 60 * 60)
html_tag_audio <- function(file, type = c("wav")) {
type <- match.arg(type)
htmltools::tags$h3(
basename(file),
htmltools::tags$audio(
controls = "",
htmltools::tags$source(
src = file,
type = glue::glue("audio/{type}", type = type)
)
)
)
}
files = Sys.glob("./clips/PB*.wav")
PB_wavs = lapply(files, function(f) {
wav = read_audio(f)
wav_length = round(length(wav) / wav@samp.rate, 2)
spectro(wav, main=paste0(basename(f), " ", wav_length, "s"), osc=TRUE)
print(html_tag_audio(f))
data.frame(filename=basename(f), wav_length)
})
PB_wavs = do.call(rbind, PB_wavs)
read_BAR_metadata = function(files) {
library(pbapply)
df = pblapply(files, function(f) {
bits = strsplit(basename(f), "_")[[1]]
start = ymd_hms(paste(bits[2], bits[3]))
site = strsplit(f, "/")[[1]][4]
try({
wav_header = readWave(f, header=TRUE)
duration = wav_header$samples / wav_header$sample.rate
end = start + duration
return(data.frame(filename = f, base_filename = basename(f), site = site, start = start, end = end, samples = wav_header$samples, sr = wav_header$sample.rate, duration=duration, interval = interval(start, end)))
})
NULL
})
df = do.call(rbind, df)
df
}
if (file.exists("misc/BAR_timespans.csv")) {
df = read.csv("misc/BAR_timespans.csv")
df$start = ymd_hms(df$start)
df$end = ymd_hms(df$end)
df$interval = interval(df$start, df$end)
} else {
files = list.files("data/2019 BAR recordings", pattern = "*.wav$", recursive = TRUE, full.names=TRUE)
df = read_BAR_metadata(files)
write.csv(df, "misc/BAR_timespans.csv", row.names = FALSE)
}
df[c("site", "interval")]
PB_to_check = "PB0023.wav"
site_to_check = "NNK30"
filtered_rfid = filter(rfid, msg == PB_to_check & site == site_to_check)
filtered_df = filter(df, site == site_to_check)
filtered_rfid$corrected_datetime = filtered_rfid$datetime
filtered_rfid$match = lapply(1:nrow(filtered_rfid), function(i) {
dt = filtered_rfid$corrected_datetime[i]
site = filtered_rfid$site[i]
indices = which(dt %within% filtered_df$interval)
if (length(indices) == 0) indices = NA
indices
})
print(paste("There are", nrow(filtered_rfid), PB_to_check, "playbacks, of which", sum(!is.na(filtered_rfid$match)), "have recordings"))
[1] "There are 307 PB0023.wav playbacks, of which 48 have recordings"
# A few randomly
datetimes_to_check = sort(sample(filtered_rfid$corrected_datetime[!is.na(filtered_rfid$match)], 5))
# Ones from the 13th
#datetimes_to_check = filtered_rfid$corrected_datetime[!is.na(filtered_rfid$match) & filtered_rfid$datetime > ymd_hms("2019-11-20 00:00:00") & filtered_rfid$datetime < ymd_hms("2019-11-20 23:59:59")]
#datetimes_to_check = filtered_rfid$corrected_datetime[!is.na(filtered_rfid$match) & filtered_rfid$corrected_datetime %within% interval(ymd_hms("2019-12-13 16:45:00"), ymd_hms("2019-12-13 17:13:00"))]
print(datetimes_to_check)
[1] "2019-12-13 15:37:01 NZDT" "2019-12-13 17:31:15 NZDT" "2019-12-13 17:57:57 NZDT" "2019-12-14 08:12:44 NZDT"
[5] "2019-12-14 08:25:41 NZDT"
#dt = ymd_hms("2019-12-13 16:45:04")
setWavPlayer("play") # OS dependent
checked_clips = lapply(datetimes_to_check, function(dt) {
match = filtered_rfid$match[filtered_rfid$corrected_datetime == dt][[1]]
f = filtered_df$filename[match]
clip_start = time_length(dt - filtered_df$start[match], unit = "seconds")
clip_end = clip_start + 1
print(paste(f, dt, clip_start, clip_end))
wav = read_audio(f, from = clip_start, to = clip_end)
spectro(wav, main=dt, osc=TRUE)
play(wav)
wav
})
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191213_STUDY [-39.1072 176.8183]/NNK30_20191213_144041_SunriseToSunset [-39.1072 176.8183].wav 2019-12-13 15:37:01 3380 3381"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ -|- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ =|= ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191213_STUDY [-39.1072 176.8183]/NNK30_20191213_164039_SunriseToSunset [-39.1072 176.8183].wav 2019-12-13 17:31:15 3036 3037"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191213_STUDY [-39.1072 176.8183]/NNK30_20191213_164039_SunriseToSunset [-39.1072 176.8183].wav 2019-12-13 17:57:57 4638 4639"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191214_STUDY [-39.1072 176.8183]/NNK30_20191214_064038_SunriseToSunset [-39.1072 176.8183].wav 2019-12-14 08:12:44 5526 5527"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191214_STUDY [-39.1072 176.8183]/NNK30_20191214_064038_SunriseToSunset [-39.1072 176.8183].wav 2019-12-14 08:25:41 6303 6304"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ -|- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
if (file.exists("misc/approx_offsets.csv")) {
approx_offsets = read.csv("misc/approx_offsets.csv")
} else {
filtered_rfid = rfid[str_extract(rfid$msg, "^.{2}") == "PB",]
approx_offsets = lapply(1:nrow(df), function(i) {
matched_events = filtered_rfid[filtered_rfid$site == df$site[i] & filtered_rfid$datetime %within% df$interval[i],]
if (nrow(matched_events) == 0) {
return(NULL)
}
if (nrow(matched_events) > 10) {
matched_events = sample_n(matched_events, 10)
}
offsets = time_length(matched_events$datetime - df$start[i])
data.frame(filename = df$filename[i], offset = offsets, site = matched_events$site, pb = matched_events$msg, datetime = matched_events$datetime)
})
approx_offsets = do.call(rbind, approx_offsets)
write.csv(approx_offsets, "misc/approx_offsets.csv", row.names = FALSE)
}
annotations = lapply(list.files("misc", "*.txt", full.names=TRUE), function(f) {
if (str_detect(f, "ZOOM")) {
return(NULL)
} else if (str_detect(f, "selections")) {
x = read.table(f, sep="\t", header=TRUE)
x$datetime = ymd_hms(paste(x$Begin.Date, x$Begin.Clock.Time))
x = x[c("Begin.Time..s.", "End.Time..s.", "Individual.ID", "Nest.ID", "datetime")]
} else {
x = read.table(f, col.names = c("Begin.Time..s.", "End.Time..s.", "Individual.ID"))[c(TRUE, FALSE),]
x$Begin.Time..s. = as.numeric(x$Begin.Time..s.)
x$End.Time..s. = as.numeric(x$Begin.Time..s.)
x$Nest.ID = strsplit(basename(f), "_")[[1]][1]
x$datetime = df$start[df$base_filename == str_replace(basename(f), ".txt", ".wav")] + x$Begin.Time..s.
}
x$filename = paste0(str_replace(basename(f), ".Band.Limited.Energy.Detector.selections.txt|.txt", ""), ".wav")
x
})
annotations = do.call(rbind, annotations)
annotations$offset = rep(NA, nrow(annotations))
annotations$Individual.ID[annotations$Individual.ID == "PB0009" | annotations$Individual.ID == "PB009"] = "PB0009zp"
annotations$Nest.ID[annotations$Nest.ID == "NKN31"] = "NNK31"
for (i in 1:nrow(annotations)) {
if (substring(annotations$Individual.ID[i], 0, 2) == "PB") {
filtered_rfid = filter(rfid, annotations$Nest.ID[i] == site & msg == paste0(annotations$Individual.ID[i], ".wav"))
matched_rec_start = df$start[df$site == annotations$Nest.ID[i] & annotations$datetime[i] %within% df$interval]
diffs = time_length(filtered_rfid$datetime - annotations$datetime[i])
min_i = which.min(abs(diffs))
offset = diffs[min_i]
if (length(offset) == 1) {
annotations$offset[i] = offset
}
}
}
approx_offsets = read_excel("misc/approx_offsets.xlsx")
-
/
New names:
* `Time offset observed by IGM` -> `Time offset observed by IGM...5`
* `Time offset observed by IGM` -> `Time offset observed by IGM...9`
names(approx_offsets) = c("filename", "guide_start", NA, NA, "Begin.Time..s.", "Nest.ID", "Individual.ID", "datetime", NA)
annotations = within(annotations, rm(End.Time..s.))
approx_offsets$offset = approx_offsets$guide_start - approx_offsets$Begin.Time..s.
approx_offsets$filename = basename(approx_offsets$filename)
approx_offsets$Individual.ID = str_replace(approx_offsets$Individual.ID, ".wav", "")
annotations = rbind(annotations, approx_offsets[names(annotations)])
annotations = na.omit(annotations)
filtered_annotations = filter(annotations, offset > -60 & Nest.ID == "NNS1")
ggplot(data = filtered_annotations, aes(x=Begin.Time..s., y=offset, color=substr(basename(filename), start = 6, stop = 20))) +
geom_point() +
geom_smooth(method = "lm") +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
labs(color='file datetime')
filtered_annotations = filter(annotations, Nest.ID == "NNBB12")
ggplot(data = filtered_annotations, aes(x=Begin.Time..s., y=offset)) +
geom_point() +
geom_smooth(method = "lm") +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE)
ggplot(data = annotations, aes(x=Begin.Time..s., y=offset, color=Nest.ID)) +
geom_point() +
geom_smooth(method = "lm") +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE)
Something is wrong with the RFID chip clock - it’s drifting significantly. More data points will help - let’s autodetect PB in the audio files
filtered_annotations = annotations[annotations$Individual.ID == "PB0023" & annotations$Nest.ID == "NNK30",]
print(filtered_annotations[1,])
library(monitoR)
PB23 = makeCorTemplate("clips/PB0023.wav", frq.lim = c(3,10), name="PB0023")
Automatic point selection.
Done.
PB24 = makeCorTemplate("clips/PB0024.wav", frq.lim = c(3,10), name="PB0024")
Automatic point selection.
Done.
ctemps = combineCorTemplates(PB23, PB24)
wav = read_audio(filtered_annotations$Begin.Path[1], from = 300, to = 800)
Error in switch(file_format, wav = read_wav, mp3 = read_mp3, wac = read_wac, :
EXPR must be a length 1 vector
monitoR seems too unreliable for this task, unfortunately
The reason for the drift is SD card write speed. BAR logfiles indicate the true time packed, so if we read the BAR logfiles we can determine the true sampling rate, and correct it. In some cases, it’ll be just under 44.1KHz.
files = list.files("data/2019 BAR recordings", pattern = "logfile.*txt$", recursive = TRUE, full.names=TRUE)
sites = sapply(strsplit(files, "/"), "[[", 4)
df$true_length = rep(NA, nrow(df))
for (site in unique(sites)) {
files_for_site = files[site == sites]
lines = unlist(lapply(files_for_site, readLines))
rec = str_subset(lines, "Recording")
dt = dmy_hms(str_extract(rec, "^.{19}"))
rec = rec[order(dt)]
dt = sort(dt)
for (i in 1:(length(rec) - 1)) {
if (str_detect(rec[i], "started") && str_detect(rec[i + 1], "stopped")) {
filtered_df = df[df$site == site,]
diffs = time_length(filtered_df$start - dt[i])
min_i = which.min(abs(diffs))
min_i = which(df$filename == filtered_df$filename[min_i])
df$true_length[min_i] = time_length(dt[i+1] - dt[i])
}
}
}
ggplot(df[df$site != "KAKA Aviary_20191101_20191113_BAR",], aes(x=start, y=true_length - duration, color = site)) +
geom_point() +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))
The problem with that though, is that sampling rates in wave files are integers - there’s a loss of precision there. It should be possible to multiply a desired second offset by the true sampling rate and slice a wav file that way.
df$true_sr = df$samples / df$true_length
df$true_sr[!is.na(df$true_sr) & df$true_sr > 44000] = 44100
write.csv(df, "misc/BAR_timespans.csv", row.names = FALSE)
ggplot(df[df$duration > 100,], aes(x=true_sr)) +
geom_histogram(binwidth=5)
approx_offsets$corrected_offset = sapply(1:nrow(approx_offsets), function(i) {
approx_offsets$offset[i] * 44100 / df$true_sr[approx_offsets$filename[i] == df$filename]
})
write.csv(approx_offsets, "misc/approx_offsets.csv", row.names = FALSE)
filtered_offsets = approx_offsets[approx_offsets$site == "NNS1" & approx_offsets$filename %in% df$filename[!is.na(df$true_sr)],]
for (i in sample(1:nrow(filtered_offsets), 10)) {
f = filtered_offsets$filename[i]
true_sr_for_f = df$true_sr[df$filename == f]
clip_start = round(filtered_offsets$offset[i] * true_sr_for_f)
clip_end = round(clip_start + true_sr_for_f)
print(paste(f, true_sr_for_f, clip_start, clip_end))
wav = readWave(filename = f, from = clip_start, to = clip_end, units="samples")
wav@samp.rate = true_sr_for_f
spectro(wav, main=basename(f), osc=TRUE)
play(wav)
}
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191201_STUDY [-39.1041 176.8027]/NNS1_20191201_044100_SunriseToSunset [-39.1041 176.8027].wav 44100 261248400 261292500"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ -=|=- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ -|- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191201_STUDY [-39.1041 176.8027]/NNS1_20191201_064100_SunriseToSunset [-39.1041 176.8027].wav 44100 29061900 29106000"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ =====|===== ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ =|= ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191130_STUDY [-39.1041 176.8027]/NNS1_20191130_064100_SunriseToSunset [-39.1041 176.8027].wav 44100 167932800 167976900"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ -====|====- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [-=====|=====-] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Hd:3.6 Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191202_STUDY [-39.0986 176.8061]/NNS1_20191202_144039_SunriseToSunset [-39.0986 176.8061].wav 43836.3659858274 271566287 271610123"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 87.8k Bit Rate: 702k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 43836Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:93.4% 00:00:00.93 [00:00:00.07] Out:41.0k [ -====|====- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ -|- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191202_STUDY [-39.0986 176.8061]/NNS1_20191202_124038_SunriseToSunset [-39.0986 176.8061].wav 43836.3659858274 303873689 303917525"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 87.8k Bit Rate: 702k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 43836Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:93.4% 00:00:00.93 [00:00:00.07] Out:41.0k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191204_STUDY [-39.0986 176.8061]/NNS1_20191204_084040_SunriseToSunset [-39.0986 176.8061].wav 43830.219844358 136005172 136049002"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 87.7k Bit Rate: 702k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 43830Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:93.4% 00:00:00.93 [00:00:00.07] Out:41.0k [!=====|=====!] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ ====|==== ] Hd:0.4 Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ | ] Hd:0.4 Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191204_STUDY [-39.0986 176.8061]/NNS1_20191204_104040_SunriseToSunset [-39.0986 176.8061].wav 43824.1297762957 138966316 139010140"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 87.7k Bit Rate: 702k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 43824Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:93.5% 00:00:00.93 [00:00:00.07] Out:41.0k [ -===|===- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ ==|== ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191204_STUDY [-39.0986 176.8061]/NNS1_20191204_124040_SunriseToSunset [-39.0986 176.8061].wav 43830.3901625677 2147689 2191519"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 87.7k Bit Rate: 702k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 43830Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:93.4% 00:00:00.93 [00:00:00.07] Out:41.0k [!=====|=====!] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ =|= ] Hd:0.0 Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:43.8k [ | ] Hd:0.0 Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191201_STUDY [-39.1041 176.8027]/NNS1_20191201_044100_SunriseToSunset [-39.1041 176.8027].wav 44100 226806300 226850400"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ -==|==- ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ ==|== ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191130_STUDY [-39.1041 176.8027]/NNS1_20191130_144100_SunriseToSunset [-39.1041 176.8027].wav 44100 131638500 131682600"
play WARN alsa: can't encode 0-bit Unknown or not applicable
/tmp/RtmpAjDPHN/tuneRtemp.wav:
File Size: 88.3k Bit Rate: 706k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: 00:00:01.00
In:0.00% 00:00:00.00 [00:00:01.00] Out:0 [ | ] Clip:0
In:92.9% 00:00:00.93 [00:00:00.07] Out:41.0k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
In:100% 00:00:01.00 [00:00:00.00] Out:44.1k [ | ] Clip:0
Done.
annotations$corrected_begin = sapply(1:nrow(annotations), function(i) {
true_sr = df$true_sr[str_detect(df$base_filename, fixed(annotations$filename[i]))]
annotations$Begin.Time..s.[i] * 44100 / true_sr
})
annotations$offset = NA
for (i in 1:nrow(annotations)) {
if (substring(annotations$Individual.ID[i], 0, 2) == "PB") {
filtered_rfid = filter(rfid, annotations$Nest.ID[i] == site & msg == paste0(annotations$Individual.ID[i], ".wav"))
matched_rec_start = df$start[str_detect(df$base_filename, fixed(annotations$filename[i]))]
rfid_offset = time_length(filtered_rfid$datetime - matched_rec_start)
diffs = time_length(annotations$corrected_begin[i] - rfid_offset)
min_i = which.min(abs(diffs))
offset = diffs[min_i]
if (length(offset) == 1) {
annotations$offset[i] = offset
}
}
}
filtered_annotations = filter(annotations, Nest.ID == "NNS1" & abs(offset) < 60)
ggplot(data = filtered_annotations, aes(x=corrected_begin, y=offset, color=substr(basename(filename), start = 6, stop = 20))) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
labs(color='file datetime') +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("Drift per file at NNS1")
ggplot(data = filtered_annotations, aes(x=datetime, y=offset)) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
labs(color='file datetime') +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("Drift per day at NNS1")
ggplot(data = annotations, aes(x=corrected_begin, y=offset, color=Nest.ID)) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))
filtered_annotations = filter(annotations, Nest.ID == "NNBB12")
ggplot(data = filtered_annotations, aes(x=datetime, y=offset)) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
labs(color='file datetime') +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("Drift per day at NNBB12")
f = "NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061]"
offset = median(annotations$offset[annotations$filename == f], na.rm=TRUE) # offset for this file
matched_df = df[str_detect(df$base_filename, fixed(f)),]
matched_event_offsets = time_length(rfid$datetime[rfid$msg == "PB0023.wav" & rfid$datetime %within% matched_df$interval & rfid$site == matched_df$site] - matched_df$start)
for (begin_time in matched_event_offsets) {
sr = matched_df$true_sr
clip_start = round((begin_time + offset) * sr)
clip_end = round(clip_start + (sr * 2))
wav = readWave(matched_df$filename, from = clip_start, to = clip_end, units = "samples")
print(paste(matched_df$filename, matched_df$true_sr, clip_start, clip_end))
wav = readWave(filename = matched_df$filename, from = clip_start, to = clip_end, units="samples")
wav@samp.rate = true_sr_for_f
spectro(wav, main=begin_time, osc=TRUE)
#play(wav)
}
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 18526744 18614393"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 35749694 35837343"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 53191766 53279415"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 71072080 71159729"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 89127692 89215341"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 106525940 106613589"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 144959852 145047501"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 162577221 162664870"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 179712522 179800171"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 197373716 197461365"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 215516976 215604625"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 232564629 232652278"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 270779420 270867069"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 288090018 288177667"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 305137672 305225321"
Not bad.
unique_rfids = unique(rfid$msg[str_extract(rfid$msg, "^.{2}") == "RF"])
#human_readable_rfids = paste0("bird", 1:length(unique_rfids))
human_readable_rfids = c("alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", "hotel", "india", "juliet", "kilo", "lima", "mike", "november")
human_readable_rfids = setNames(human_readable_rfids, unique_rfids)
unique_rfids = setNames(unique_rfids, human_readable_rfids)
processed_rfid = rfid
mask = str_extract(processed_rfid$msg, "^.{2}") == "RF"
processed_rfid$msg[mask] = human_readable_rfids[processed_rfid$msg[mask]]
ggplot(processed_rfid[mask,], aes(x = datetime, color = msg)) +
geom_freqpoly(binwidth = 60 * 60 * 24) +
ggtitle("RFID detections per day")
if (file.exists("misc/processed_rfid.csv")) {
processed_rfid2 = read.csv("misc/processed_rfid.csv")
processed_rfid2$datetime = ymd_hms(processed_rfid2$datetime)
} else {
time_threshold = 2
LG_threshold = 1
library(pbapply)
processed_rfid2 = pblapply(1:sum(mask), function(i) {
dt = processed_rfid$datetime[mask][i]
this_site = processed_rfid$site[mask][i]
bird = processed_rfid$msg[mask][i]
LG = filter(processed_rfid, site == this_site & abs(datetime - dt) < time_threshold & msg == "Light Gate Change")
if (nrow(LG) > 2) {
event_type = NULL
ext_g = mean(diff(LG$ext))
int_g = mean(diff(LG$int))
if (ext_g < 0 & int_g > 0) {
event_type = "entry"
} else if (int_g < 0 & ext_g > 0) {
event_type = "exit"
}
if (length(event_type) == 1) {
print(paste(i, bird, event_type, this_site, dt))
return(data.frame(i = i, bird = bird, event_type = event_type, ext_g = ext_g, int_g = int_g, site = this_site, datetime = dt))
}
}
})
processed_rfid2 = do.call(rbind, processed_rfid)
write.csv(processed_rfid2, "misc/processed_rfid.csv", row.names=FALSE)
}
ggplot(processed_rfid2, aes(x = datetime, y = bird, color = event_type)) + geom_point()
ggplot(filter(processed_rfid2, datetime > ymd("2019-12-28") & datetime < ymd("2019-12-29")), aes(x = datetime, y = bird, color = event_type)) + geom_point()
Seems a bit too unreliable - the light gates might be too sensitive. Looks like we’ll have to just slice around RFID passes.
df$offset = sapply(df$base_filename, function(f) {
median(annotations$offset[paste0(annotations$filename) == f], na.rm = TRUE)
})
pblapply(1:nrow(dts_to_slice_deduplicated), function(i) {
start = dts_to_slice_deduplicated$start[i]
duration = dts_to_slice_deduplicated$duration[i]
bird = dts_to_slice_deduplicated$bird[i]
site = dts_to_slice_deduplicated$site[i]
matched_df = df[df$site == site & start %within% df$interval & !is.na(df$offset) & !is.na(df$true_sr),]
if (nrow(matched_df) == 1) {
sr = matched_df$true_sr
clip_start_s = time_length(start - matched_df$start) + matched_df$offset
clip_start_samples = round(clip_start_s * sr)
clip_end_samples = round(clip_start_samples + (sr * duration))
#print(paste(i, bird, site, start, duration, matched_df$filename, matched_df$true_sr, clip_start_samples, clip_end_samples))
wav = readWave(filename = matched_df$filename, from = clip_start_samples, to = clip_end_samples, units="samples")
wav@samp.rate = sr
if (sr != 44100) {
wav = resamp(wav, g = 44100, output = "Wave")
}
wav@left = round(wav@left)
formatted_date = format(start, "%Y-%m-%d_%H%M%S_NZDT")
output_filename = paste0("data/2019 BAR recordings - individual bird clips/", bird, "/", site, "_", formatted_date, ".wav")
mkdirs(dirname(output_filename))
writeWave(wav, filename = output_filename, extensible = F)
}
})
Error in pblapply(1:nrow(dts_to_slice_deduplicated), function(i) { :
could not find function "pblapply"
template_wav = readWave("misc/ZOOM0049_NNK6_LNVX_F_FH_sel.01.ch01.181124.094641.12..wav")
template_wav = resamp(template_wav, g = 44100, output = "Wave")
template_duration = length(template_wav@left) / template_wav@samp.rate
savewav(template_wav, filename = "misc/zip_template.wav")
corTemplate = makeCorTemplate("misc/zip_template.wav", wl = 300, frq.lim = c(5, 15))
Automatic point selection.
Done.
for (bird in human_readable_rfids) {
files_for_bird = Sys.glob(paste0("data/2019 BAR recordings - individual bird clips/", bird, "/*.wav"))
clips = c()
if (length(files_for_bird) == 0) {
next
}
for (i in 1:length(files_for_bird)) {
f = files_for_bird[i]
cscores = corMatch(f, corTemplate)
cdetects = findPeaks(cscores)
detects = getDetections(cdetects)
if (i == 1) {
plot(cdetects)
}
if (nrow(detects) > 1) {
for (j in 1:nrow(detects)) {
start_time = detects$time[j]
clip = readWave(f, from = start_time, to = start_time + template_duration, units = "seconds")@left
clips = c(clips, clip)
}
}
}
if (length(clips) > 10) {
wav = Wave(clips, samp.rate = 44100, bit = 16)
output_filename = paste0("data/2019 BAR recordings - individual bird clips/", bird, ".wav")
writeWave(wav, output_filename, extensible = F)
}
}
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
0 to 10.000022675737 seconds
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done
Starting A . . .
Fourier transform on survey . . .
Continuing. . .
Done.
Done with A
Done